package com.dhcc.DRGsHosp.web.controller;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.openkoala.koala.commons.InvokeResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.dhcc.DRGsHosp.facade.DrgFeeMedinsFacade;
import com.dhcc.DRGsHosp.facade.dto.IndexCalDTO;
import com.dhcc.DRGsHosp.infra.util.MonitorResultUtil;

@Controller("drgFeeMedins")
@RequestMapping("/DrgFeeMedins")
public class DrgFeeMedinsController {
	@Autowired
	private DrgFeeMedinsFacade drgFeeMedinsFacade;
	List<String> filesPath = new ArrayList<String>();// 上传成功的文件路径
	/**
	 * 
	 * @Description 北京drg支付医保分组结果数据上传控件
	 * @return
	 * @Author huangju
	 */
	@ResponseBody
	@RequestMapping("/drgFeeMedinsUpload")  
    public InvokeResult drgFeeMedinsUpload(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException {  
		filesPath = new ArrayList<String>();//每次调用清空文件路径
		String fileCat = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());//定义一个随时间变化的变量，加在filename前，使上传的文件不重复
		//创建一个通用的多部分解析器  
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());  
        //判断 request 是否有文件上传,即多部分请求  
        if(multipartResolver.isMultipart(request)){  
            //转换成多部分request    
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;  
            //取得request中的所有文件名  
            Iterator<String> iter = multiRequest.getFileNames();  
            while(iter.hasNext()){  
                //记录上传过程起始时的时间，用来计算上传时间  
                int pre = (int) System.currentTimeMillis();  
                //取得上传文件  
                MultipartFile file = multiRequest.getFile(iter.next());  
                if(file != null){  
                    //取得当前上传文件的文件名称  
                    String myFileName = file.getOriginalFilename();  
                    //如果名称不为“”,说明该文件存在，否则说明该文件不存在  
                    if(myFileName.trim() !=""){
                        System.out.println(myFileName);  
                        //重命名上传后的文件名  
                        String fileName = fileCat+"_"+ file.getOriginalFilename();  
                        //定义上传路径  
                        String path = request.getSession().getServletContext().getRealPath("/")+"upload";
                        File localFile = new File(path);
                        if (!localFile.exists()) {
							localFile.mkdirs();
						}
                        localFile = new File(path + File.separatorChar + fileName);
                        try {
							file.transferTo(localFile);
							filesPath.add(path + File.separatorChar + fileName);
						} catch (Exception e) {
							e.printStackTrace();
						}//文件上传至服务器  
                    }  
                }  
                //记录上传该文件后的时间  
                int finaltime = (int) System.currentTimeMillis();  
                System.out.println("本文件上传时间："+(finaltime - pre)+"ms");  
            }  
        }  
        return InvokeResult.success();
    }
	/**
	 * @Description 北京drg支付医保分组结果数据上传
	 * @return
	 * @Author huangju
	 */
	@ResponseBody
	@RequestMapping("/importDrgFeeMedinsData"  )  
    public InvokeResult importDrgFeeMedinsData(String type){ 
        InvokeResult iResult = InvokeResult.success();
        String uploadType=type==null?"":type.toString().trim();
        for (String filePath : filesPath) {
        	iResult = drgFeeMedinsFacade.importDrgFeeMedinsData(filePath,uploadType);
		}
        filesPath.clear();
        return iResult;
    }
	/**
	 * 获取后台数据处理进度和详情
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/uploadDrgFeeMedinsProgress") 
	public InvokeResult uploadDrgFeeMedinsProgress(){
		 return drgFeeMedinsFacade.uploadDrgFeeMedinsProgress();
	}
	/**
	 * 
	 *  @Discription：获取科室医保指标
	 *  @Author： huangju
	 *  @param sDate
	 *  @param eDate
	 *  @return
	 *  @Date:2018年12月11日下午9:36:45
	 */
	@ResponseBody
    @RequestMapping(value ="getDepMedinsQuota", method = RequestMethod.POST)
	public InvokeResult getDepMedinsQuota(IndexCalDTO dto){
		return InvokeResult.success(drgFeeMedinsFacade.getDepMedinsQuota(dto));
	}
	/**
	 * 
	 * @Description：出院病历数列表
	 * @Author：qiaoyilong
	 * @ClassName: getOutCases  
	 * @Date: 2018年12月19日 上午11:14:36  
	 * @Version：3.1.0 DHC.DRGs 
	 */
	@ResponseBody
    @RequestMapping(value ="getOutCases", method = RequestMethod.POST)
	public InvokeResult getOutCases(IndexCalDTO dto){
		return InvokeResult.success(drgFeeMedinsFacade.getOutCases(dto));
	}
	/**
	 *  @Discription：获取科室医保下的病组指标
	 *  @Author： huangju
	 *  @param dto
	 *  @return
	 *  @Date:2018年12月19日下午2:49:14
	 */
	@ResponseBody
	@RequestMapping(value="getDepUnderDrgsMedinsQuota",method=RequestMethod.POST)
	public InvokeResult getDepUnderDrgsMedinsQuota(IndexCalDTO dto){
		return InvokeResult.success(drgFeeMedinsFacade.getDepUnderDrgsMedinsQuota(dto));
	}
	/**
	 *  获取报表初始化时间
	 *  initeDateTimePicker.  
	 *  @Description：
	 *  @Author ChenHanlin
	 *  @return 
	 *  @Date:2017年9月4日下午7:11:44
	 */
	@ResponseBody
	@RequestMapping(value = "/initeDateTimePicker", method = RequestMethod.POST)
	public InvokeResult initeDateTimePicker() {
		String lastDate = drgFeeMedinsFacade.getLatestDate() ;
		String lastMonth = lastDate.substring(0, 7) ;
		String startDateMonth = MonitorResultUtil.getStartDateMonth(lastMonth) ;
		String endDateMonth = MonitorResultUtil.getEndDateMonth(lastMonth) ;
		Map<String,Object> map = new HashMap<String, Object>() ;
		map.put("lastDate", lastDate) ;
		map.put("startDateMonth", startDateMonth) ;
		map.put("endDateMonth", endDateMonth) ;
		return InvokeResult.success(map);
	}
}
